#ifndef __CLI_H__
#define __CLI_H__

/*
 * Esta libreria incluye las primitivas para usar al implementar un cliente
 *
 * Esta version simplificada solo puede conectarse con un servidor simultaneamente
 * 
 */


/*
 *  Esta es la declaracion del puntero a funcion que sera llamado para notificar el
 * estado de las comunicaciones. Codigo es del conjunto CON definido en conexion.h
 * data y size son los datos y el tamaño recibidos.
 * Los datos recibidos no se deben modificar.
 * Objeto es el parametro o pasado al suscribirse.
 */
typedef void(*cli_callback)(int codigo, void *data, int size, void *objeto);

/*
 *  Inicializacion y Cierre
 */
int cli_iniciar(); //Llamar una vez a esta funcion al comenzar el programa
int cli_terminar(); //Llamar una vez a esta funcion al terminar el programa
int cli_suscribir(cli_callback func, void *o);//Agrega una callback a la suscripcion.
int cli_dessuscribir(void *o);//Desuscribe todas las funciones asociadas al objeto.

/*
 *  Enlazar esta funcion al ticker
 * se debe llamar a esta funcion frecuentemente para procesar los datos que llegan
 * 
 */
int cli_procesar();

/*
 * Estas funciones definen las comunicaciones
 *
 */
int cli_conectar(char *servidor);//Llamar a esta funcion para iniciar una conexion. El parametro es un string de la forma host:puerto
int cli_desconectar();//Llamar a esta funcion para terminar la comunicacion con el servidor.

int cli_enviar(void *data, int size);//Llamar a esta funcion para enviar datos al servidor
int cli_status(int *codigo);//Llamar a esta funcion para conocer el estado de conexion.

int cli_error(char **descripcion);//Al recibir un mensaje de error usar esta funcion para obtener el codigo.

#endif

